package dao;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import model.OrdemServico;
import model.Tecnico;
import model.Visita;
import vo.PeriodoVO;

@Stateless
public class MarcarVisita implements MarcarVisitaLocal{
	@PersistenceContext
	private EntityManager entityManager;

	@SuppressWarnings("unchecked")
	@Override
	public List<PeriodoVO> findPeriodDisp(String dia) {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		String sql = " SELECT h.TECN_ID, t.tecn_tx_nome as nome, h.HORA, h.DIA, h.id FROM horario h inner join tecnico t on h.tecn_id = t.tecn_id " + 
					 " WHERE h.DIA = ?1 ORDER BY h.HORA LIMIT 5";
		Query q = entityManager.createNativeQuery(sql);
		q.setParameter(1, dia);
		List <Vector> arrayResultBruto =  q.getResultList();
		List <PeriodoVO> periodos = new ArrayList<PeriodoVO> ();
		for (Vector resultBruto : arrayResultBruto) {
			PeriodoVO periodo = new PeriodoVO();
			periodo.setIdTecnico(((Long) resultBruto.get(0)).intValue());
			periodo.setTecnico(resultBruto.get(1).toString());
			periodo.setHora(resultBruto.get(2).toString());
			String hra = resultBruto.get(3).toString().substring(0, 10);
			periodo.setIdPeriodo(((Long)resultBruto.get(4)).intValue());
			Date data;
			try {
				data = df.parse(hra);
				periodo.setDataHora(data);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			periodos.add(periodo);
		}
		return periodos;
	}

	@Override
	public void marcaVisita(Integer idOrdemServico, PeriodoVO periodo) {
		//Recupero os objetos originais
		OrdemServico os = entityManager.find(OrdemServico.class, idOrdemServico);
		Tecnico tec = entityManager.find(Tecnico.class, periodo.getIdTecnico());
		Visita vis = new Visita();
		vis.setOs(os);
		vis.setTecnico(tec);
		vis.setDataHoraVisita(periodo.getDataHora());
		entityManager.persist(vis);
		String deleteSql = "delete from horario where id = " + periodo.getIdPeriodo() + "";
		Query q = entityManager.createNativeQuery(deleteSql);
		System.out.println("Registros atualizados:" ); 
		q.executeUpdate();
	}

	public Collection<PeriodoVO> findPeriodosDisponiveis() {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy - hh:mm");
		Collection <PeriodoVO> periodos = new ArrayList<PeriodoVO> ();
	
		try {
			PeriodoVO periodo1 = new PeriodoVO();
			Date d1 = df.parse("27/12/2008 - 11:30");
			periodo1.setDataHora(d1);
			periodo1.setTecnico("Pedro Siqueira");
			periodo1.setIdTecnico(1);
			periodos.add(periodo1);
			
			PeriodoVO periodo2 = new PeriodoVO();
			Date d2 = df.parse("04/01/2009 - 16:45");
			periodo2.setDataHora(d2);
			periodo2.setTecnico("Antonio Roncolo");
			periodo2.setIdTecnico(2);
			periodos.add(periodo2);
			
			PeriodoVO periodo3 = new PeriodoVO();
			Date d3 = df.parse("06/01/2009 - 09:40");
			periodo3.setDataHora(d3);
			periodo3.setTecnico("Antonio Roncolo");
			periodo3.setIdTecnico(2);
			periodos.add(periodo3);
			
			PeriodoVO periodo4 = new PeriodoVO();
			Date d4 = df.parse("11/01/2009 - 17:00");
			periodo4.setDataHora(d4);
			periodo4.setTecnico("Antonio Roncolo");
			periodo4.setIdTecnico(2);
			periodos.add(periodo4);
			
		} catch (ParseException e) {
			e.printStackTrace();
		}
	
		return periodos;
	}
	
	
}
